package com.cskaoyan.javase.oop3._1interface._3exercise;

/**
 * 教练（Coach）和运动员（Sportsman）案例
 * 小试牛刀请用所学知识分析：这个案例中有哪些抽象类，哪些接口，哪些具体类。
 * 现在有乒乓球运动员和篮球运动员，乒乓球教练和篮球教练。
 *      为了能够出国交流，跟乒乓球相关的人员都需要学习英语。
 *
 * 抽象类: 抽象运动员,抽象教练
 * 接口: 扩展学习的功能
 * 具体类: 篮球/乒乓球运动员,篮球/乒乓球教练
 *
 *
 * @since 17:29
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        BaseCoach bc = new TableTennisCoach();
        bc.teach();
        if (bc instanceof TableTennisCoach){
            ((TableTennisCoach) bc).learnEnglish();
        }
    }
}

abstract class BaseSportsman {
    String name;
    int age;
    double bonus;
    double salary;

    public BaseSportsman() {
    }

    public BaseSportsman(String name, int age, double bonus, double salary) {
        this.name = name;
        this.age = age;
        this.bonus = bonus;
        this.salary = salary;
    }

    // 抽象行为,训练
    public abstract void exercise();
}

abstract class BaseCoach {
    String name;
    int age;

    // 抽象行为,教授,指导
    public abstract void teach();

    public BaseCoach() {
    }

    public BaseCoach(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

// 接口,表示学习功能的扩展
interface ILearning {
    void learnEnglish();
}

class BasketballSportsman extends BaseSportsman{

    @Override
    public void exercise() {
        System.out.println("我要打篮球!");
    }
}

class TableTennisCoach extends BaseCoach implements ILearning{

    @Override
    public void teach() {
        System.out.println("我教你打乒乓球!");
    }

    @Override
    public void learnEnglish() {
        System.out.println("学英语!");
    }
}